<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>23 原型链继承</title>
	</head>
	<body>
		<script type="text/javascript">
			
			// 继承:在原型对象的所有属性和方法,都能被实例所共享
			
			
			// Animal类  
			
			// Dog类
			// 定制Animal
			function Animal(){
				this.name = 'alex';
				this.colors = ['red','green','blue'];
			}
			Animal.prototype.getName = function(){
				return this.name;
			}
			
			function Dog(){};
			// Dog继承了Animal
			// 本质:重写原型对象,将一个父对象的属性和方法作为一个子对象的原型对象的属性和方法
			Dog.prototype = new Animal();
			Dog.prototype.constructor = Dog;
			var d1 = new Dog();
			var d2 = new Dog();
			console.log(d1.colors);
			console.log(d2.colors);
			d1.colors.push('purple');
			console.log(d1.colors);
			console.log(d2.colors);
			
			// 问题1: 父类中的实例属性一旦赋值给子类的原型属性,此时这些属性都属于子类的共享属性
			// 问题2: 实例化子类型的时候,不能向父类型的构造函数传参
			
			
			
			
			
		</script>
	</body>
</html>
